package com.mm.fam.web.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mm.fam.web.entity.SysMenu;
import com.mm.fam.web.entity.ins.AuthMenuTreeIns;
import com.mm.fam.web.vo.MenuPermissionTree;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author zt
 * @since 2018-09-29
 */
@Repository
public interface SysMenuMapper extends BaseMapper<SysMenu> {

    /**
     * 通过用户id 获取菜单
     * @param userId
     * @return
     */
    List<SysMenu> getMenuByUserId(Integer userId);

    /**
     * 通过角色id 获取菜单
     * @param roleId
     * @return
     */
    List<SysMenu> getMenuByRoleId(String roleId);

    /**
     * 通过角色ids 获取菜单
     * @param roleIds
     * @return
     */
    List<SysMenu> getMenuByRoleIds(List<Integer> roleIds);


    List<AuthMenuTreeIns> getMenuTreeByUserId(Integer userId);

    /**
     * 权限树
     * @param map 指定根菜单
     * @return
     */
    List<AuthMenuTreeIns> getMenuTree(Map<String, Object> map);

    /**
     * 根据菜单id删除菜单
     * @param id
     * @return
     */

    int deleteMenuById(@Param("id") String id);

    //====================================== add by chenyu begin ================================

    List<SysMenu> queryListByCondition(@Param("paramMap") Map<String, Object> paramMap);

    SysMenu queryOneByCondition(@Param("paramMap") Map<String, Object> paramMap);

    /**
     * 分页查询父级菜单列表(树行结构 在mybatis中使用了嵌套查询)
     * @param page
     * @return
     */
    List<SysMenu> queryParentMenu(Page<SysMenu> page, @Param("paramMap") Map<String, Object> param);

    /**
     * 分页查询子级菜单列表(树行结构 子结构为可访问权限 在mybatis中使用了嵌套查询)
     * @param page
     * @return
     */
    List<MenuPermissionTree> menuPermissionTreeList(Page<MenuPermissionTree> page, @Param("paramMap") Map<String, Object> paramMap);
    //====================================== add by chenyu end================================
}
